Post-Race UCLA Triathlon: Tritonman¶

The Bruins took on Tritonman hosted by UCSD Triathlon, a sprint distance triathlon. The planned 750-meter open water swim was canceled for the draft legal race and was instead replaced with an opening leg of one lap of the run course, which is approximately 1 mile. The bike leg, 21 kilometers long (~13 miles), consisted of three laps around Fiesta Island, and was followed by a 5-kilometer run to end the race.

Race highlight: On Saturday the Bruins took on the National Triathlon Development Race-certified Draft Legal division, where athletes compete for an elite license. In the men's race, UCLA’s Edoardo Leone and Colorado’s Matheus Menezes could not be separated until the final sprint, where Edo triumphed, tumbling over the line just a whisker ahead in an epic finish securing his first IRONMAN pro card for Oceanside 70.3 in a time of 52:02. At Oceanside, Edo finished 42nd in the men's pro field, outperforming his seed by 27 places at his first-ever 70.3. Edo was joined by fellow Bruins Miisa Makela and Austin Liu as Oceanside finishers.

The following includes results for every Bruin at this race, personalized graphs (for competitors whose split time data was available) showing how Bruins fared at each stage of the race, and informative statistics describing which legs best predicted the final results. This data analysis intends to provide grounds for celebration and further improvement. In the words of UCLA Triathlon alumnus Nathan Montanez, "knowing is half the battle." My hope is that this information is more visually appealing and engaging than a traditional essay-format presentation.

Please contact Lukas Rhoades at lukasrhoades11@gmail.com with any questions.

Draft Legal Race¶

In [1]:
from tristats import trirace
tritonman_dl = trirace()
tritonman_dl.set_legs(leg1="Run1", leg3="Run2")
tritonman_dl.get_data_active("TritonmanDraftLegal2025")
tritonman_dl.data.replace("--", None, inplace=True)

Men's team results¶

In [2]:
mens_dl = trirace()
mens_dl.set_legs(leg1="Run1", leg3="Run2")
mens_dl.set_data(tritonman_dl.get_gender("Male"))
mens_dl.data.reset_index(drop=True, inplace=True)
ucla_men_dl = ["Edoardo Giuseppe Leone", "Marius Genton", "Emiliano Olivo-Cauberghs", "Jairo Alejandro Angel Escobar"]
mens_dl.data[mens_dl.data.Name.isin(ucla_men_dl)]
Out[2]:
Name Gender Run1 T1 Bike T2 Run2 Total
0 Edoardo Giuseppe Leone Male 00:05:34 00:00:22 00:30:27 00:00:22 00:15:16 00:52:02
45 Marius Genton Male 00:06:31 00:00:25 00:31:47 00:00:28 00:19:49 00:59:01
56 Emiliano Olivo-Cauberghs Male 00:06:08 00:00:33 00:31:57 00:00:27 00:25:03 01:04:11
61 Jairo Alejandro Angel Escobar Male 00:07:09 00:00:40 00:38:28 00:00:35 00:20:36 01:07:31

Women's team results¶

In [3]:
womens_dl = trirace()
womens_dl.set_legs(leg1="Run1", leg3="Run2")
womens_dl.set_data(tritonman_dl.get_gender("Female"))
womens_dl.data.reset_index(drop=True, inplace=True)
ucla_women_dl = ["Josie Goodson", "Eleanor Casey", "Kayla Kashima", "Miisa Makela", "Aedin McGoldrick", "Cassaundra Pino"]
womens_dl.data[womens_dl.data.Name.isin(ucla_women_dl)]
Out[3]:
Name Gender Run1 T1 Bike T2 Run2 Total
16 Josie Goodson Female 00:07:04 00:00:46 00:36:05 00:00:47 00:20:03 01:04:47
17 Cassaundra Pino Female 00:07:01 00:00:40 00:36:08 00:00:39 00:20:17 01:04:47
26 Eleanor Casey Female 00:07:15 00:00:51 00:37:38 00:00:59 00:20:49 01:07:34
30 Kayla Kashima Female 00:07:23 00:00:45 00:37:34 00:00:53 00:21:25 01:08:01
37 Aedin McGoldrick Female 00:07:11 00:00:41 00:39:57 00:00:39 00:23:26 01:11:56
47 Miisa Makela Female 00:09:29 00:00:38 00:44:11 00:00:49 00:28:35 01:23:44

Women's time distribution by legs¶

In [4]:
womens_dl.get_histograms("Tritonman Women's Draft Legal Race")
No description has been provided for this image

Men's time distribution by legs¶

In [5]:
mens_dl.get_histograms("Tritonman Men's Draft Legal Race")
No description has been provided for this image

Men's position charts¶

In [6]:
mens_dl.get_position()
for athlete in ucla_men_dl:
    mens_dl.get_place_chart(athlete)
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image

Women's position charts¶

In [7]:
womens_dl.get_position()
for athlete in ucla_women_dl:
    womens_dl.get_place_chart(athlete)
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image

Women's race leg importance¶

In [8]:
womens_dl.race_leg_imp("Tritonman Women's Draft Legal Race")
No description has been provided for this image

Men's race leg importance¶

In [9]:
mens_dl.race_leg_imp("Tritonman Men's Draft Legal Race")
No description has been provided for this image

Classic Race¶

In [10]:
tritonman_classic = trirace()
tritonman_classic.get_data_active("TritonmanClassic2025")
tritonman_classic.data.replace("--", None, inplace=True)

Women's team results¶

In [11]:
womens_classic = trirace()
womens_classic.set_data(tritonman_classic.get_gender("Female"))
womens_classic.data.reset_index(drop=True, inplace=True)
ucla_women_classic = ["Josie Goodson", "Josephine Borsetto", "Aliyah Anderson", "Alison Arndt", "Natasha Cosgrove", "Justine Marques",
                      "Emma M", "Lillian Aronovitz", "Brianna Choi", "Jolie Rice", "Triniti Santos", "Nicole Eskigian", "Shelby Jackson"]
womens_classic.data[womens_classic.data.Name.isin(ucla_women_classic)]
Out[11]:
Name Gender Swim T1 Bike T2 Run Total
19 Josie Goodson Female 00:14:07 00:01:13 00:38:58 00:01:12 00:21:08 01:16:39
33 Josephine Borsetto Female 00:14:28 00:01:02 00:41:21 00:00:38 00:21:20 01:18:51
43 Lillian Aronovitz Female 00:14:02 00:01:50 00:41:31 00:00:49 00:22:47 01:21:01
56 Aliyah Anderson Female 00:15:39 00:00:51 00:43:34 00:00:46 00:21:52 01:22:44
65 Shelby Jackson Female 00:12:45 00:01:21 00:46:18 00:00:27 00:23:32 01:24:25
72 Alison Arndt Female 00:16:57 00:01:32 00:43:25 00:00:46 00:22:46 01:25:28
107 Jolie Rice Female 00:14:13 00:02:37 00:49:51 00:00:31 00:26:24 01:33:37
113 Brianna Choi Female 00:16:06 00:02:05 00:51:24 00:00:37 00:25:23 01:35:35
115 Justine Marques Female 00:14:03 00:02:43 00:51:46 00:00:30 00:26:57 01:36:01
124 Nicole Eskigian Female 00:18:56 00:02:37 00:52:53 00:00:53 00:26:55 01:42:16
125 Emma M Female 00:18:46 00:02:57 00:52:44 00:00:47 00:27:03 01:42:19
136 Natasha Cosgrove Female 00:22:34 None None None 00:24:50 01:45:36
140 Triniti Santos Female 00:16:19 00:02:50 00:57:55 00:03:24 00:29:26 01:49:56

Men's team results¶

In [12]:
mens_classic = trirace()
mens_classic.set_data(tritonman_classic.get_gender("Male"))
mens_classic.data.reset_index(drop=True, inplace=True)
ucla_men_classic = ["Edoardo Giuseppe Leone", "Austin Liu", "Emmett Cocke", "Jacob Niyazov", "Lachlan Guo", "Lucas Angier"]
mens_classic.data[mens_classic.data.Name.isin(ucla_men_classic)]
Out[12]:
Name Gender Swim T1 Bike T2 Run Total
0 Edoardo Giuseppe Leone Male 00:10:52 00:00:38 00:30:04 00:00:35 00:15:59 00:58:10
79 Emmett Cocke Male NaN NaN NaN NaN NaN 01:14:42
117 Jacob Niyazov Male 00:17:27 00:01:56 00:39:54 00:00:39 00:18:59 01:18:57
155 Lachlan Guo Male 00:14:43 00:01:23 00:38:48 00:00:47 00:28:14 01:23:56
159 Austin Liu Male 00:18:18 00:01:05 00:37:06 00:01:53 00:26:09 01:24:34
190 Lucas Angier Male 00:17:42 00:01:54 00:45:57 00:00:19 00:23:46 01:29:39

Men's time distribution by legs¶

In [13]:
mens_classic.get_histograms("Tritonman Men's Classic Race")
No description has been provided for this image

Women's time distribution by legs¶

In [14]:
womens_classic.get_histograms("Tritonman Women's Classic Race")
No description has been provided for this image

Women's position charts¶

In [15]:
womens_classic.get_position()
for athlete in ucla_women_classic:
    womens_classic.get_place_chart(athlete)
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image

Men's position charts¶

In [16]:
mens_classic.get_position()
for athlete in ucla_men_classic:
    mens_classic.get_place_chart(athlete)
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image

Men's race leg importance¶

In [17]:
mens_classic.race_leg_imp("Tritonman Men's Classic Race")
No description has been provided for this image

Women's race leg importance¶

In [18]:
womens_classic.race_leg_imp("Tritonman Women's Classic Race")
No description has been provided for this image